package com.yihuier.yihuier.Util;

import java.util.Arrays;
import java.util.Base64;

public class ByteOperator {

    private static final char[] HEX_CHARS =
            {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
    /**
     * 比较两个byte数组是否相等
     * @param b1 byte数组一
     * @param b2 byte数组二
     * @return 相等则true，不相等则false
     */
    public static boolean compareTwoBytes(byte[] b1,byte [] b2){
        //长度不等之间返回false
        if (b1.length != b2.length){
            return false;
        }
        //开始比较
        for (int i = 0 ; i < b1.length ;i++){
            if (b1[i] != b2[i]){
                return false;
            }
        }
        //比较完毕，全部都匹配
        return true;
    }
    /**
     * 将byte数组转换为字符串
     * @param data byte数组
     * @return 字符串
     */
    public static String byteToString(byte [] data){
        if (data == null){
            return null;
        }
        return Base64.getEncoder().encodeToString(data);
    }

    public static String encodeHex(byte[] bytes) {
        char[] chars = new char[32];
        for (int i = 0; i < chars.length; i = i + 2) {
            byte b = bytes[i / 2];
            chars[i] = HEX_CHARS[(b >>> 0x4) & 0xf];
            chars[i + 1] = HEX_CHARS[b & 0xf];
        }
        return new String(chars);
    }

    /**
     * 将字符串转换位byte数组
     * @param data 字符串
     * @return byte数组
     */
    public static byte [] stringToByte(String data){
        if (data == null){
            return null;
        }
        return Base64.getDecoder().decode(data);
    }
    /**
     * 拼接两个byte数组，x | y
     * @param x byte数组一
     * @param y byte数组二
     * @return 返回新的拼接byte数组
     */
    public static byte [] GlueTwoBytes(byte [] x , byte [] y){
        if (x == null){
            return null;
        }
        if (y == null){
            return null;
        }

        byte [] result = new byte [x.length + y.length];
        int i = 0;
        for (; i < x.length ;i++){
            result[i] = x[i];
        }
        for (int j = 0;j < y.length ; i++,j++){
            result[i] = y[j];
        }
        return result;
    }
}
